package com.neuedu.ioDemo;

import java.io.*;

public class CharIOTestDriver {
    public static void main(String[] args) {
        test02();
    }


    /**
     * 字符流的应用：带buffer的输入输出流
     */
    private static void test02() {

        try {
            //创建一个文件输入流对象,第二个参数指定的是编码格式

            BufferedReader fis = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream("D:\\temp\\iotest/filein01.txt"),"GBK"));
            //创建一个文件输出流对象
            //注意：第二个参数默认是false，表示每次从文件的开头开始写入内容，也就是覆盖写；
            //      如果第二个参数是true，表示每次从文件的末尾开始写，也就是末尾追加写；
            BufferedWriter fos =new BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream("D:\\temp\\iotest/filein01_out2019022_2.txt",true),"GBK"));


            //将文件流对象中的内容读取到程序中
            String strLine=fis.readLine();

            //判断是否读取到文件末尾
            while (strLine != null) {

                //输出读取内容
                System.out.println(strLine);
                //使用文件输出流对象，将内容写出到指定文件中
                fos.write(strLine);
                //BufferedWriter写出内容末尾没有换行符，需要手动为每一行内容写出一个换行符
                //fos.write("\n");
                fos.newLine();  //写一个换行符



                // 继续往下读取内容(否则进入死循环)
                strLine = fis.readLine();

            }





            //关闭资源
            //也可以写在finally部分进行资源回收
            if (fis!=null){
                fis.close();
            }
            //清空输出流
            if (fos!=null) {
                fos.flush();
                fos.close();
            }
        } catch(Exception e){
            e.printStackTrace();
        }

    }




    /**
     * 字符流的应用：文件输入流
     */
    private static void test01() {

        try {
            //创建一个文件输入流对象,第二个参数指定的是编码格式

            InputStreamReader fis =
                    new InputStreamReader(
                            new FileInputStream("D:\\temp\\iotest/filein01.txt"),"GBK");
            //创建一个文件输出流对象
            //注意：第二个参数默认是false，表示每次从文件的开头开始写入内容，也就是覆盖写；
            //      如果第二个参数是true，表示每次从文件的末尾开始写，也就是末尾追加写；
            OutputStreamWriter fos =
                    new OutputStreamWriter(
                            new FileOutputStream("D:\\temp\\iotest/filein01_out2019022.txt",true),"GBK");

            //创建一个读取文件输入流中的流数据的容器数组
            char[] chars = new char[1024];
            //将文件流对象中的内容读取到程序中
            int len = fis.read(chars);

            //判断是否读取到文件末尾
            while (len != -1) {

                //输出读取内容
                String strLine = new String(chars,0,len);
                System.out.println(strLine);
                //使用文件输出流对象，将内容写出到指定文件中
                fos.write(chars, 0, len);



                //重新清理读取的容器数组
                //char[] chars = new char[1024];
                // 继续往下读取内容(否则进入死循环)
                len = fis.read(chars);

            }

            //文件输出流写完后，在文件末尾追加一个换行符
            //fos.write（'\n'）
            fos.write("\n".toCharArray());

            //关闭资源
            //也可以写在finally部分进行资源回收
            if (fis!=null){
                fis.close();
            }
            //清空输出流
            if (fos!=null) {
                fos.flush();
                fos.close();
            }
        } catch(Exception e){
            e.printStackTrace();
        }

    }
}
